package club.xiaojiawei.array;

/**
 * @author 肖嘉威
 * @version 1.0
 * @date 2022/4/17 15:41
 * @question 35.搜索插入位置
 * @description 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法
 */
public class SearchInsertPosition35 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9,10,20,30,40,50,100};
        System.out.println(searchInsert(arr,2));
        System.out.println(searchInsert(arr,200));
        System.out.println(searchInsert(arr,-1));
    }

    public static int searchInsert(int[] nums, int target) {
        int length = nums.length-1;
        if (target<nums[0]){
            return 0;
        }else if (target>nums[length]){
            return length+1;
        }
        int left=0;
        int right= length ;
        while (left<=right){
            int middle=(left+right)>>1;
            if (target<nums[middle]){
//                往前看一个元素
                if (target>nums[middle-1]){
                    return middle;
                }
                right=middle-1;
            }else if (target>nums[middle]){
//                往后看一个元素
                if (target<nums[middle+1]){
                    return middle+1;
                }
                left=middle+1;
            }else {
                return middle;
            }
        }
        return -1;
    }
}
